package org.monte.previo2.base;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.monte.previo2.clases.Imagen;
import org.monte.previo2.clases.Tipo;
import org.monte.previo2.clases.encuesta.Applicacion;
import org.monte.previo2.clases.encuesta.Cliente;
import org.monte.previo2.clases.encuesta.Opcion;
import org.monte.previo2.clases.encuesta.Pregunta;
import org.monte.previo2.clases.encuesta.Previo;
import org.monte.previo2.clases.encuesta.Respuesta;
import org.monte.previo2.clases.encuesta.Seccion;
import org.monte.previo2.clases.encuesta.Validacion;

import com.google.gson.Gson;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import android.renderscript.RenderScript.RSErrorHandler;
import android.util.Log;
import android.widget.Toast;

public class ManagerDB {
	private base manejador;
	private Context cont;

	public ManagerDB(Context context) {
		cont = context;
		manejador = new base(context);
	}

	public void close() {
		manejador.close();
	}

	public Applicacion getApplicacionById(String id) {

		String selectQuery = "SELECT  * FROM Aplicaciones INNER JOIN previos on aplicaciones.idPrevio= previos.idPrevio inner join clientes on aplicaciones.ClienteAplicacion=clientes.idCliente where idAplicacion="
				+ id;

		SQLiteDatabase db = manejador.getWritableDatabase();
		Cursor cursor = db.rawQuery(selectQuery, null);
		Applicacion app = new Applicacion();
		// looping through all rows and adding to list
		if (cursor.moveToFirst()) {
			do {

				app.setIdAplicacion(cursor.getString(0));

				app.setIdAplicacion(cursor.getString(0));
				app.setIdDispositivo(cursor.getString(1));
				app.setIdEncuesta(cursor.getString(2));
				app.setIdPrevio(cursor.getString(3));
				app.setClienteAplicacion(cursor.getString(4));
				app.setFechaEstimada(cursor.getString(5));
				app.setFechaAplicacion(cursor.getString(6));
				app.setEstado(cursor.getString(7));
				app.setLatitudeAp(cursor.getString(8));
				app.setLongitudeAp(cursor.getString(9));
				app.setTipoValidacion(cursor.getString(10));
				app.setLatitudeGeo(cursor.getString(11));
				app.setLongitudeGeo(cursor.getString(12));
				app.setRadio(cursor.getString(13));

				Previo prev = new Previo();

				prev.setIdPrevio(cursor.getString(14));
				prev.setReferencia(cursor.getString(15));
				prev.setPedimento(cursor.getString(16));
				prev.setContenedor(cursor.getString(17));
				prev.setTipoContenedor(cursor.getString(18));
				prev.setBL(cursor.getString(19));
				prev.setMercancia(cursor.getString(20));
				prev.setSellosOrigen(cursor.getString(21));
				prev.setOperadora(cursor.getString(22));
				prev.setBuque(cursor.getString(23));
				prev.setFacturas(cursor.getString(24));
				prev.setProveedor(cursor.getString(25));
				prev.setPais(cursor.getString(26));
				prev.setCajas(cursor.getString(27));

				Cliente clien = new Cliente();
				clien.setIdCliente(cursor.getString(28));
				clien.setEmpresa(cursor.getString(29));
				clien.setNombre(cursor.getString(30));
				clien.setRFC(cursor.getString(31));
				clien.setContacto(cursor.getString(32));
				clien.setDomicilio(cursor.getString(33));
				clien.setEstado(cursor.getString(34));
				clien.setCiudad(cursor.getString(35));
				clien.setTelefono(cursor.getString(36));
				clien.setEmail(cursor.getString(37));
				clien.setLatitude(cursor.getString(38));
				clien.setLongitude(cursor.getString(39));
				clien.setCarpetaImagenes(cursor.getString(40));
				clien.setActivo(cursor.getString(41));

				app.setPrevio(prev);
				app.setCliente(clien);

			} while (cursor.moveToNext());
		}
		return app;
	}

	// Devuelve todas las aplicaciones
	public List<Applicacion> getAllApplicacion() {
		List<Applicacion> AppList = new ArrayList<Applicacion>();
		// Select All
		String selectQuery = "SELECT  * FROM Aplicaciones INNER JOIN previos on aplicaciones.idPrevio= previos.idPrevio inner join clientes on aplicaciones.ClienteAplicacion=clientes.idCliente";

		SQLiteDatabase db = manejador.getWritableDatabase();
		Cursor cursor = db.rawQuery(selectQuery, null);

		// looping through all rows and adding to list
		if (cursor.moveToFirst()) {
			do {
				Applicacion app = new Applicacion();
				app.setIdAplicacion(cursor.getString(0));

				app.setIdAplicacion(cursor.getString(0));
				app.setIdDispositivo(cursor.getString(1));
				app.setIdEncuesta(cursor.getString(2));
				app.setIdPrevio(cursor.getString(3));
				app.setClienteAplicacion(cursor.getString(4));
				app.setFechaEstimada(cursor.getString(5));
				app.setFechaAplicacion(cursor.getString(6));
				app.setEstado(cursor.getString(7));
				app.setLatitudeAp(cursor.getString(8));
				app.setLongitudeAp(cursor.getString(9));
				app.setTipoValidacion(cursor.getString(10));
				app.setLatitudeGeo(cursor.getString(11));
				app.setLongitudeGeo(cursor.getString(12));
				app.setRadio(cursor.getString(13));

				Previo prev = new Previo();

				prev.setIdPrevio(cursor.getString(14));
				prev.setReferencia(cursor.getString(15));
				prev.setPedimento(cursor.getString(16));
				prev.setContenedor(cursor.getString(17));
				prev.setTipoContenedor(cursor.getString(18));
				prev.setBL(cursor.getString(19));
				prev.setMercancia(cursor.getString(20));
				prev.setSellosOrigen(cursor.getString(21));
				prev.setOperadora(cursor.getString(22));
				prev.setBuque(cursor.getString(23));
				prev.setFacturas(cursor.getString(24));
				prev.setProveedor(cursor.getString(25));
				prev.setPais(cursor.getString(26));
				prev.setCajas(cursor.getString(27));

				Cliente clien = new Cliente();
				clien.setIdCliente(cursor.getString(28));
				clien.setEmpresa(cursor.getString(29));
				clien.setNombre(cursor.getString(30));
				clien.setRFC(cursor.getString(31));
				clien.setContacto(cursor.getString(32));
				clien.setDomicilio(cursor.getString(33));
				clien.setEstado(cursor.getString(34));
				clien.setCiudad(cursor.getString(35));
				clien.setTelefono(cursor.getString(36));
				clien.setEmail(cursor.getString(37));
				clien.setLatitude(cursor.getString(38));
				clien.setLongitude(cursor.getString(39));
				clien.setCarpetaImagenes(cursor.getString(40));
				clien.setActivo(cursor.getString(41));

				app.setPrevio(prev);
				app.setCliente(clien);
				AppList.add(app);
			} while (cursor.moveToNext());
		}
		return AppList;
	}

	public List<Imagen> getAllImages() {
		List<Imagen> ImaList = new ArrayList<Imagen>();
		// Select All
		String selectQuery = "SELECT  * FROM imagenes";

		SQLiteDatabase db = manejador.getWritableDatabase();
		Cursor cursor = db.rawQuery(selectQuery, null);

		// looping through all rows and adding to list
		if (cursor.moveToFirst()) {
			do {
				Imagen im = new Imagen();
				im.setIdImagen(Integer.parseInt(cursor.getString(0)));
				im.setTipo(new Tipo());
				im.getTipo().setIdTipo(Integer.parseInt(cursor.getString(1)));
				im.setNombre(cursor.getString(2));
				im.setUrl(cursor.getString(3));
				im.setComentario(cursor.getString(4));
				im.setEnviada(Byte.parseByte(cursor.getString(5)));
				// im.setAplicacion(new Applicacion());
				// im.getAplicacion().setIdAplicacio(
				// Integer.parseInt(cursor.getString(6)));
				// Adding Imagen to list
				ImaList.add(im);
				Log.i(cursor.getPosition() + " ", im.toString());
			} while (cursor.moveToNext());
		}
		return ImaList;
	}

	public void deleteApp() {
		SQLiteDatabase db = manejador.getWritableDatabase();
		db.delete("aplicaciones", null, null);
		db.close();
	}

	public void deleteApp(int id) {
		SQLiteDatabase db = manejador.getWritableDatabase();
		db.delete("aplicaciones", "idAplicacion = ?", new String[] { "" + id });
		db.close();
	}

	public boolean insertImagen(Imagen img) {
		SQLiteDatabase db = manejador.getWritableDatabase();

		ContentValues values = new ContentValues();

		values.put("idTipo", img.getTipo().getIdTipo());
		values.put("nombre", img.getNombre());
		values.put("url", img.getUrl());
		values.put("enviada", img.getEnviada());
		values.put("idAplicacion", img.getAplicacion().getIdAplicacion());
		values.put("comentario", img.getComentario());

		Log.i("insertImagen",
				"Tipo" + img.getTipo().getIdTipo() + " /" + img.toString());
		if (db.insert("imagenes", null, values) == -1) {
			db.close();
			return false;
		}
		db.close();
		Log.e("oncreate", "creamos user");
		return true;
	}

	public Imagen getImagenToUpload() {
		Imagen img = null;
		try {
			SQLiteDatabase db = manejador.getReadableDatabase();
			Cursor cursor = db
					.rawQuery(
							"select  * from imagenes where (imagenes.idTipo < 3) and (imagenes.enviada = 0) order by idImagen asc LIMIT 1;",
							null);

			while (cursor.moveToNext()) {
				img = new Imagen();
				img.setIdImagen(cursor.getInt(0));
				Tipo t = new Tipo();
				t.setIdTipo(cursor.getInt(1));
				img.setTipo(t);
				img.setNombre(cursor.getString(2));
				img.setUrl(cursor.getString(3));
				img.setComentario(cursor.getString(4));
				img.setEnviada((byte) cursor.getInt(5));
				img.setIdaplicacion(cursor.getString(6));

			}
			db.close();

			
			Applicacion app = this.getApplicacionById(img.getIdaplicacion());
			img.setAplicacion(app);

		} catch (Exception e) {
			Toast.makeText(cont, e.getLocalizedMessage(), Toast.LENGTH_SHORT)
					.show();
		}

		return img;
	}

	public Imagen getImagenToSincronizar() {
		Imagen img = null;
		try {
			SQLiteDatabase db = manejador.getReadableDatabase();
			Cursor cursor = db
					.rawQuery(
							"select  * from imagenes where (imagenes.idTipo = 3) and (imagenes.enviada = 0) order by idImagen asc LIMIT 1;",
							null);

			while (cursor.moveToNext()) {
				img = new Imagen();
				img.setIdImagen(cursor.getInt(0));
				Tipo t = new Tipo();
				t.setIdTipo(cursor.getInt(1));
				img.setTipo(t);
				img.setNombre(cursor.getString(2));
				img.setUrl(cursor.getString(3));
				img.setComentario(cursor.getString(4));
				img.setEnviada((byte) cursor.getInt(5));
				img.setIdaplicacion(cursor.getString(6));

			}
			db.close();

			
			 Applicacion app=this.getApplicacionById(img.getIdaplicacion());
			img.setAplicacion(app);
		} catch (Exception e) {
			Toast.makeText(cont, e.getLocalizedMessage(), Toast.LENGTH_SHORT)
					.show();
		}

		return img;
	}

	public boolean updateImagenEstado(int id) {

		SQLiteDatabase db = manejador.getWritableDatabase();

		ContentValues values = new ContentValues();
		values.put("enviada", 1);

		if (db.update("imagenes", values, "idImagen=" + id, null) == -1) {
			db.close();
			return false;
		}
		db.close();
		Log.e("oncreate", "creamos user");
		return true;
	}

	public void daletePrueba() {
		SQLiteDatabase db = manejador.getWritableDatabase();
		db.delete("imagenes", "idImagen > 2", null);
		db.close();
	}

	public boolean updateImagenPrueba() {

		SQLiteDatabase db = manejador.getWritableDatabase();

		ContentValues values = new ContentValues();
		values.put("enviada", 0);

		if (db.update("imagenes", values, null, null) == -1) {
			db.close();
			return false;
		}
		db.close();
		Log.e("oncreate", "creamos user");
		return true;
	}

	

	public boolean insertPrevio(Previo prev) {
		SQLiteDatabase db = manejador.getWritableDatabase();

		ContentValues values = new ContentValues();

		values.put("idPrevio", prev.getIdPrevio());
		values.put("Referencia", prev.getReferencia());
		values.put("Pedimento", prev.getPedimento());
		values.put("Contenedor", prev.getContenedor());
		values.put("TipoContenedor", prev.getTipoContenedor());
		values.put("BL", prev.getBL());
		values.put("Mercancia", prev.getMercancia());
		values.put("SellosOrigen", prev.getSellosOrigen());
		values.put("Operadora", prev.getOperadora());
		values.put("Buque", prev.getBuque());
		values.put("Facturas", prev.getFacturas());
		values.put("Proveedor", prev.getProveedor());
		values.put("Pais", prev.getPais());
		values.put("Cajas", prev.getCajas());

		if (db.insert("Previos", null, values) == -1) {
			db.close();
			return false;
		}

		db.close();
		return true;
	}

	public boolean insertCliente(Cliente cli) {
		SQLiteDatabase db = manejador.getWritableDatabase();

		ContentValues values = new ContentValues();

		values.put("idCliente", cli.getIdCliente());
		values.put("Empresa", cli.getEmpresa());
		values.put("Nombre", cli.getNombre());
		values.put("RFC", cli.getRFC());
		values.put("Contacto", cli.getContacto());
		values.put("Domicilio", cli.getDomicilio());
		values.put("Estado", cli.getEstado());
		values.put("Ciudad", cli.getCiudad());
		values.put("Telefono", cli.getTelefono());
		values.put("Email", cli.getEmail());
		values.put("Latitude", cli.getLatitude());
		values.put("Longitude", cli.getLongitude());
		values.put("CarpetaImagenes", cli.getCarpetaImagenes());
		values.put("Activo", cli.getActivo());

		if (db.insert("Clientes", null, values) == -1) {
			db.close();
			return false;
		}

		db.close();
		return true;
	}

	public boolean insertEncuesta(org.monte.previo2.clases.encuesta.Encuesta enc) {
		SQLiteDatabase db = manejador.getWritableDatabase();

		ContentValues values = new ContentValues();

		values.put("idEncuesta", enc.getIdEncuesta());
		values.put("Estudio", enc.getEstudio());
		values.put("Nombre", enc.getNombre());
		values.put("Responsable", enc.getResponsable());
		values.put("FechaInicio", enc.getFechaInicio());
		values.put("FechaTermino", enc.getFechaTermino());
		values.put("Activo", enc.getActivo());

		if (db.insert("Encuesta", null, values) == -1) {
			db.close();
			return false;
		}

		db.close();
		return true;
	}

	public boolean insertApplicacion(
			org.monte.previo2.clases.encuesta.Applicacion app) {
		SQLiteDatabase db = manejador.getWritableDatabase();

		ContentValues values = new ContentValues();

		values.put("idAplicacion", app.getIdAplicacion());
		values.put("idDispositivo", app.getIdDispositivo());
		values.put("idEncuesta", app.getIdEncuesta());
		values.put("idPrevio", app.getIdPrevio());
		values.put("ClienteAplicacion", app.getClienteAplicacion());
		values.put("FechaEstimada", app.getFechaEstimada());
		values.put("FechaAplicacion", app.getFechaAplicacion());
		values.put("Estado", app.getEstado());
		values.put("LatitudeAp", app.getLatitudeAp());
		values.put("LongitudeAp", app.getLongitudeAp());
		values.put("TipoValidacion", app.getTipoValidacion());
		values.put("LatitudeGeo", app.getLatitudeGeo());
		values.put("LongitudeGeo", app.getLongitudeGeo());
		values.put("radio", app.getRadio());

		if (db.insert("Aplicaciones", null, values) == -1) {
			db.close();
			return false;
		}

		db.close();
		return true;
	}

	public boolean insertSeccion(Seccion secc) {
		SQLiteDatabase db = manejador.getWritableDatabase();

		ContentValues values = new ContentValues();

		values.put("idSeccion", secc.getIdSeccion());
		values.put("Encuesta", secc.getEncuesta());
		values.put("Nombre", secc.getNombre());
		values.put("Encabezado", secc.getEncabezado());

		if (db.insert("Seccion", null, values) == -1) {
			db.close();
			return false;
		}

		db.close();
		return true;
	}

	public boolean insertPregunta(Pregunta preg) {
		SQLiteDatabase db = manejador.getWritableDatabase();

		ContentValues values = new ContentValues();

		values.put("idPregunta", preg.getIdPregunta());
		values.put("Seccion", preg.getSeccion());
		values.put("SubSeccion", preg.getSubSeccion());
		values.put("TipoPregunta", preg.getTipoPregunta());
		values.put("Texto", preg.getTexto());
		values.put("TextoAuxiliar", preg.getTextoAuxiliar());
		values.put("NumeroOpMultiple", preg.getNumeroOpMultiple());
		values.put("NumeroOpSeleccionable", preg.getNumeroOpSeleccionable());
		values.put("NumeroFilas", preg.getNumeroFilas());
		values.put("Requerida", preg.getRequerida());
		values.put("Secuencia", preg.getSecuencia());
		values.put("Otro", preg.getOtro());
		values.put("subseccionInfo",preg.getSubseccionInfo());
		

		if (db.insert("Pregunta", null, values) == -1) {
			db.close();
			return false;
		}

		db.close();
		return true;
	}

	public boolean insertRespuesta(Respuesta res) {
		SQLiteDatabase db = manejador.getWritableDatabase();
         
		ContentValues values = new ContentValues();

		values.put("idAplicacion", res.getIdAplicacion());
		values.put("idPregunta", res.getIdPregunta());
		values.put("idOpcion", res.getIdOpcion());
		values.put("RespuestaFecha", res.getRespuestaFecha());
		values.put("RespuestaNumero", res.getRespuestaNumero());
		values.put("RespuestaTexto", res.getRespuestaTexto());

		if (db.insert("Respuestas", null, values) == -1) {
			db.close();
			return false;
		}

		db.close();
		return true;
	}
	
	
	

	public boolean insertOptMultiple(Opcion opc) {
		SQLiteDatabase db = manejador.getWritableDatabase();

		ContentValues values = new ContentValues();
		values.put("idOpcion", opc.getIdOpcion());
		values.put("idPregunta", opc.getIdPregunta());
		values.put("Texto", opc.getTexto());
		values.put("Secuencia", opc.getSecuencia());
		values.put("Otro", opc.getOtro());

		if (db.insert("opMultiple", null, values) == -1) {
			db.close();
			return false;
		}

		db.close();
		return true;
	}

	public boolean insertValidacion(Validacion val) {
		SQLiteDatabase db = manejador.getWritableDatabase();

		ContentValues values = new ContentValues();

		values.put("idPregunta", val.getIdPregunta());
		values.put("TipoDato", val.getTipoDato());
		values.put("Mascara ", val.getMascara());
		values.put("ValorInicial", val.getValorInicial());
		values.put("ValorFinal", val.getValorFinal());

		if (db.insert("Validacion", null, values) == -1) {
			db.close();
			return false;
		}

		db.close();
		return true;
	}

	public boolean isSync() {

		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db.rawQuery("select * from main LIMIT 1;", null);

		while (cursor.moveToNext()) {
			if (cursor.getInt(1) == 1)
				return true;
			else if (cursor.getInt(1) == 0)
				return false;
		}

		return false;
	}

	public boolean existEncuesta(String id) {
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db.rawQuery("select * from Encuesta where idEncuesta="
				+ id, null);

		if (cursor.getCount() == 0)
			return false;

		db.close();
		return true;
	}

	public boolean existCliente(String id) {
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db.rawQuery("select * from clientes where idCliente="
				+ id, null);

		if (cursor.getCount() == 0)
			return false;

		db.close();
		return true;
	}

	public boolean setSyncOn() {

		SQLiteDatabase db = manejador.getWritableDatabase();

		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
		Calendar cal = Calendar.getInstance();

		ContentValues values = new ContentValues();
		values.put("Fecha", dateFormat.format(cal.getTime()));
		values.put("Sincronizada", 0);

		if (db.update("main", values, null, null) == -1) {
			db.close();
			return false;
		}
		db.close();
		Log.e("oncreate", "creamos user");
		return true;
	}

	public boolean setSyncDown() {

		SQLiteDatabase db = manejador.getWritableDatabase();

		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
		Calendar cal = Calendar.getInstance();

		ContentValues values = new ContentValues();
		values.put("Fecha", dateFormat.format(cal.getTime()));
		values.put("Sincronizada", 1);

		if (db.update("main", values, null, null) == -1) {
			db.close();
			return false;
		}
		db.close();
		Log.e("oncreate", "creamos user");
		return true;
	}

	public Seccion getNextSeccion(Seccion secc) {
		Seccion seccion = null;
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db.rawQuery(
				"select * from seccion where Encuesta=" + secc.getEncuesta()
						+ " and idSeccion > " + secc.getIdSeccion()
						+ " order by idSeccion asc  LIMIT 1", null);

		while (cursor.moveToNext()) {

			seccion = new Seccion();
			secc.setIdSeccion(cursor.getString(0));
			secc.setEncuesta(cursor.getString(1));
			secc.setNombre(cursor.getString(2));
			secc.setEncabezado(cursor.getString(3));

		}

		db.close();
		return seccion;
	}

	public Seccion getPreviusSeccion(Seccion secc) {
		Seccion seccion = null;
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db.rawQuery(
				"select * from seccion where Encuesta=" + secc.getEncuesta()
						+ " and idSeccion < " + secc.getIdSeccion()
						+ " order by idSeccion asc  LIMIT 1", null);

		while (cursor.moveToNext()) {

			seccion = new Seccion();
			secc.setIdSeccion(cursor.getString(0));
			secc.setEncuesta(cursor.getString(1));
			secc.setNombre(cursor.getString(2));
			secc.setEncabezado(cursor.getString(3));
		}

		db.close();
		return seccion;
	}

	public Pregunta getNextPregunta(Pregunta preg,String idAplicacion) {
		Pregunta pregunta = null;
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db.rawQuery(
				"select * from Pregunta where seccion=" + preg.getSeccion()
						+ "  and secuencia > " + preg.getSecuencia()
						+ " order by secuencia asc limit 1", null);

		while (cursor.moveToNext()) {
			pregunta = new Pregunta();

			pregunta.setIdPregunta(cursor.getString(0));
			pregunta.setSeccion(cursor.getString(1));
			pregunta.setSubSeccion(cursor.getString(2));
			pregunta.setTipoPregunta(cursor.getString(3));
			pregunta.setTexto(cursor.getString(4));
			pregunta.setTextoAuxiliar(cursor.getString(5));
			pregunta.setNumeroOpMultiple(cursor.getString(6));
			pregunta.setNumeroOpSeleccionable(cursor.getString(7));
			pregunta.setNumeroFilas(cursor.getString(8));
			pregunta.setRequerida(cursor.getString(9));
			pregunta.setSecuencia(cursor.getString(10));
			pregunta.setOtro(cursor.getString(11));
			pregunta.setSubseccionInfo(cursor.getString(12));

		}

		db.close();
		if (pregunta != null) {
			pregunta.setValidacion(this.getValidacionBYPregunta(pregunta
					.getIdPregunta()));
			pregunta.setOpciones(this.getOpcionesBYPregunta(pregunta
					.getIdPregunta(),idAplicacion));
			
			//if(pregunta.TipoPregunta.equals("1") || pregunta.TipoPregunta.equals("6")){
				pregunta.setRespuesta(this.getRespuestaByPregunta(pregunta.getIdPregunta(), idAplicacion));
				
			//}
		}
		return pregunta;
	}

	public Pregunta getPreviusPregunta(Pregunta preg,String idAplicacion) {
		Pregunta pregunta = null;
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db.rawQuery(
				"select * from Pregunta where seccion=" + preg.getSeccion()
						+ "  and secuencia < " + preg.getSecuencia()
						+ " order by secuencia desc limit 1", null);

		while (cursor.moveToNext()) {
			pregunta = new Pregunta();

			pregunta.setIdPregunta(cursor.getString(0));
			pregunta.setSeccion(cursor.getString(1));
			pregunta.setSubSeccion(cursor.getString(2));
			pregunta.setTipoPregunta(cursor.getString(3));
			pregunta.setTexto(cursor.getString(4));
			pregunta.setTextoAuxiliar(cursor.getString(5));
			pregunta.setNumeroOpMultiple(cursor.getString(6));
			pregunta.setNumeroOpSeleccionable(cursor.getString(7));
			pregunta.setNumeroFilas(cursor.getString(8));
			pregunta.setRequerida(cursor.getString(9));
			pregunta.setSecuencia(cursor.getString(10));
			pregunta.setOtro(cursor.getString(11));
			pregunta.setSubseccionInfo(cursor.getString(12));

		}

		db.close();
		if (pregunta != null) {
			pregunta.setValidacion(this.getValidacionBYPregunta(pregunta
					.getIdPregunta()));
			pregunta.setOpciones(this.getOpcionesBYPregunta(pregunta
					.getIdPregunta(),idAplicacion));
			
			//if(pregunta.TipoPregunta.equals("1") || pregunta.TipoPregunta.equals("6")){
				pregunta.setRespuesta(this.getRespuestaByPregunta(pregunta.getIdPregunta(), idAplicacion));
				
			//}
		}
		return pregunta;
	}

	public Validacion getValidacionBYPregunta(String idPregunta) {
		Validacion validacion = null;
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db
				.rawQuery("select * from Validacion where idPregunta="
						+ idPregunta, null);

		while (cursor.moveToNext()) {
			validacion = new Validacion();

			validacion.setIdPregunta(cursor.getString(0));
			validacion.setTipoDato(cursor.getString(1));
			validacion.setMascara(cursor.getString(2));
			validacion.setValorInicial(cursor.getString(3));
			validacion.setValorFinal(cursor.getString(4));

		}

		db.close();
		return validacion;
	}

	public List<Opcion> getOpcionesBYPregunta(String idPregunta,String idAplicacion) {
		List<Opcion> list = new ArrayList<Opcion>();
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db
				.rawQuery("select * from  opMultiple where idPregunta="
						+ idPregunta+" order by secuencia asc", null);

		while (cursor.moveToNext()) {
			Opcion opc = new Opcion();

			opc.setIdOpcion(cursor.getString(0));
			opc.setIdPregunta(cursor.getString(1));
			opc.setTexto(cursor.getString(2));
			opc.setSecuencia(cursor.getString(3));
			opc.setOtro(cursor.getString(4));
            
			
			opc.setRespuesta(this.getRespuestaByOpcion(opc, idAplicacion));
			list.add(opc);
		}

		db.close();
		return list;
	}
	
	public List<Seccion> getSeccionesBYEncuesta(String idEncuesta) {
		List<Seccion> list = new ArrayList<Seccion>();
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db
				.rawQuery("select * from seccion where Encuesta=" + idEncuesta					
						+ " order by idSeccion asc", null);

		while (cursor.moveToNext()) {
			
			Seccion seccion = new Seccion();
			seccion.setIdSeccion(cursor.getString(0));
			seccion.setEncuesta(cursor.getString(1));
			seccion.setNombre(cursor.getString(2));
			seccion.setEncabezado(cursor.getString(3));

			list.add(seccion);
		}

		db.close();
		return list;
	}
	
	
	public Pregunta getNextPreguntaTabla(Pregunta preg,String idAplicacion) {
		Pregunta pregunta = null;
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db.rawQuery(
				"select * from Pregunta where seccion=" + preg.getSeccion()
						+ "  and secuencia = " + preg.getSecuencia()
						+ "  and idPregunta > " + preg.getIdPregunta() + " order by secuencia asc limit 1", null);

		while (cursor.moveToNext()) {
			pregunta = new Pregunta();

			pregunta.setIdPregunta(cursor.getString(0));
			pregunta.setSeccion(cursor.getString(1));
			pregunta.setSubSeccion(cursor.getString(2));
			pregunta.setTipoPregunta(cursor.getString(3));
			pregunta.setTexto(cursor.getString(4));
			pregunta.setTextoAuxiliar(cursor.getString(5));
			pregunta.setNumeroOpMultiple(cursor.getString(6));
			pregunta.setNumeroOpSeleccionable(cursor.getString(7));
			pregunta.setNumeroFilas(cursor.getString(8));
			pregunta.setRequerida(cursor.getString(9));
			pregunta.setSecuencia(cursor.getString(10));
			pregunta.setOtro(cursor.getString(11));
			pregunta.setSubseccionInfo(cursor.getString(12));

		}

		db.close();
		if (pregunta != null) {
			pregunta.setValidacion(this.getValidacionBYPregunta(pregunta
					.getIdPregunta()));
			pregunta.setOpciones(this.getOpcionesBYPregunta(pregunta
					.getIdPregunta(),idAplicacion));
			//if(pregunta.TipoPregunta.equals("1") || pregunta.TipoPregunta.equals("6")){
				pregunta.setRespuesta(this.getRespuestaByPregunta(pregunta.getIdPregunta(), idAplicacion));
				
			//}
		}
		return pregunta;
	}

	public Pregunta getPreviusPreguntaTabla(Pregunta preg,String idAplicacion) {
		Pregunta pregunta = null;
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db.rawQuery(
				"select * from Pregunta where seccion=" + preg.getSeccion()
						+ "  and secuencia = " + preg.getSecuencia()
						+ "  and idPregunta < " + preg.getIdPregunta() + " order by idPregunta desc limit 1", null);

		while (cursor.moveToNext()) {
			pregunta = new Pregunta();

			pregunta.setIdPregunta(cursor.getString(0));
			pregunta.setSeccion(cursor.getString(1));
			pregunta.setSubSeccion(cursor.getString(2));
			pregunta.setTipoPregunta(cursor.getString(3));
			pregunta.setTexto(cursor.getString(4));
			pregunta.setTextoAuxiliar(cursor.getString(5));
			pregunta.setNumeroOpMultiple(cursor.getString(6));
			pregunta.setNumeroOpSeleccionable(cursor.getString(7));
			pregunta.setNumeroFilas(cursor.getString(8));
			pregunta.setRequerida(cursor.getString(9));
			pregunta.setSecuencia(cursor.getString(10));
			pregunta.setOtro(cursor.getString(11));
			pregunta.setSubseccionInfo(cursor.getString(12));

		}

		db.close();
		if (pregunta != null) {
			pregunta.setValidacion(this.getValidacionBYPregunta(pregunta
					.getIdPregunta()));
			pregunta.setOpciones(this.getOpcionesBYPregunta(pregunta
					.getIdPregunta(),idAplicacion));
			
			//if(pregunta.TipoPregunta.equals("1") || pregunta.TipoPregunta.equals("6")){
				pregunta.setRespuesta(this.getRespuestaByPregunta(pregunta.getIdPregunta(), idAplicacion));
				
			//}
		}
		return pregunta;
	}

	public boolean deleteRespuestasByPregunta(String idPregunta,String idAplicacion) {
		SQLiteDatabase db = manejador.getWritableDatabase();
		

		if (db.delete("Respuestas", "idAplicacion="+idAplicacion+" and idPregunta="+idPregunta, null) == -1) {
			db.close();
			return false;
		}

		db.close();
		return true;
	}	
	
	
	public Respuesta getRespuestaByOpcion(Opcion opcion,String idAplicacion){
		Respuesta resp = null;
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db.rawQuery("select * from Respuestas where idAplicacion=" + idAplicacion
						+ "  and idPregunta = " + opcion.getIdPregunta()
						+ "  and idOpcion = " + opcion.getIdOpcion() + " limit 1", null);

		while (cursor.moveToNext()) {
			resp = new Respuesta();
			resp.setIdAplicacion(cursor.getString(0));
			resp.setIdPregunta(cursor.getString(1));
			resp.setIdOpcion(cursor.getString(2));
			resp.setRespuestaFecha(cursor.getString(3));
			resp.setRespuestaNumero(cursor.getString(4));
			resp.setRespuestaTexto(cursor.getString(5));			

		}

		db.close();
		
		return resp;
		
		
	}	
	
	public Respuesta getRespuestaByPregunta(String idPregunta,String idAplicacion){
		Respuesta resp = null;
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db.rawQuery("select * from Respuestas where idAplicacion=" + idAplicacion
						+ "  and idPregunta = " + idPregunta 
						+ "  and idOpcion = -1 limit 1", null);
		while (cursor.moveToNext()) {
			resp = new Respuesta();
			resp.setIdAplicacion(cursor.getString(0));
			resp.setIdPregunta(cursor.getString(1));
			resp.setIdOpcion(cursor.getString(2));
			resp.setRespuestaFecha(cursor.getString(3));
			resp.setRespuestaNumero(cursor.getString(4));
			resp.setRespuestaTexto(cursor.getString(5));			

		}

		db.close();
		
		return resp;
		
		
	}
	
	
	public int getTotalPreguntasBySeccion(String idSeccion){
	
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db.rawQuery("select secuencia from Pregunta where seccion=" + idSeccion + " order by secuencia desc limit 1", null);
		cursor.moveToFirst();
        int total=cursor.getInt(0);
		db.close();
		
		return total;
		
		
	}
	
	public Pregunta getLastPreguntaTabla(Pregunta preg,String idAplicacion) {
		Pregunta pregunta = null;
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db.rawQuery(
				"select * from Pregunta where seccion=" + preg.getSeccion()
						+ "  and secuencia = " + preg.getSecuencia()
						+ "  order by idPregunta desc limit 1", null);

		while (cursor.moveToNext()) {
			pregunta = new Pregunta();

			pregunta.setIdPregunta(cursor.getString(0));
			pregunta.setSeccion(cursor.getString(1));
			pregunta.setSubSeccion(cursor.getString(2));
			pregunta.setTipoPregunta(cursor.getString(3));
			pregunta.setTexto(cursor.getString(4));
			pregunta.setTextoAuxiliar(cursor.getString(5));
			pregunta.setNumeroOpMultiple(cursor.getString(6));
			pregunta.setNumeroOpSeleccionable(cursor.getString(7));
			pregunta.setNumeroFilas(cursor.getString(8));
			pregunta.setRequerida(cursor.getString(9));
			pregunta.setSecuencia(cursor.getString(10));
			pregunta.setOtro(cursor.getString(11));
			pregunta.setSubseccionInfo(cursor.getString(12));

		}

		db.close();
		if (pregunta != null) {
			pregunta.setValidacion(this.getValidacionBYPregunta(pregunta
					.getIdPregunta()));
			pregunta.setOpciones(this.getOpcionesBYPregunta(pregunta
					.getIdPregunta(),idAplicacion));
			
			if(pregunta.TipoPregunta.equals("1") || pregunta.TipoPregunta.equals("6")){
				pregunta.setRespuesta(this.getRespuestaByPregunta(pregunta.getIdPregunta(), idAplicacion));
				
			}
		}
		return pregunta;
	}
	
	
	public String getAllRespuestasToJSon(){
	    ArrayList<Respuesta> list= new ArrayList<Respuesta>();
		SQLiteDatabase db = manejador.getReadableDatabase();
		Cursor cursor = db.rawQuery("select * from Respuestas", null);
		while (cursor.moveToNext()) {
			Respuesta resp = new Respuesta();
			resp.setIdAplicacion(cursor.getString(0));
			resp.setIdPregunta(cursor.getString(1));
			resp.setIdOpcion(cursor.getString(2));
			resp.setRespuestaFecha(cursor.getString(3));
			resp.setRespuestaNumero(cursor.getString(4));
			resp.setRespuestaTexto(cursor.getString(5));	
			list.add(resp);

		}

		db.close();
		
		Gson d = new Gson();
		String json =d.toJson(list);
				
		return json;
		
		
	}
	
	
	public String insertarRespuestas(String url,String json) throws ClientProtocolException, IOException{
		
		HttpClient httpclient = new DefaultHttpClient();
		HttpPost httpget = new HttpPost(url);
		
		List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
        nameValuePairs.add(new BasicNameValuePair("key", "43b5dc92c7f385ed4977843832c00640"));
        nameValuePairs.add(new BasicNameValuePair("respuestas", json));
        httpget.setEntity(new UrlEncodedFormEntity(nameValuePairs));
		
		
		HttpResponse response;

		response = httpclient.execute(httpget);
		HttpEntity entity = response.getEntity();
		if (entity != null) {
			String result = EntityUtils.toString(entity);
             String fd=result;
             
			return result;
		} else {
			// Log.e("Andronautas", "entity == null");
			return "";
		}
	}
	
	public boolean daleteAll() {
		/*
		SQLiteDatabase db = manejador.getWritableDatabase();

		
		if (db.delete("imagenes", null, null) == -1)
			return false;
		
		if (db.delete("Previos", null, null) == -1)
			return false;

		if (db.delete("Clientes", null, null) == -1)
			return false;
		

		if (db.delete(" Aplicaciones", null, null) == -1)
			return false;
		
		if (db.delete("Encuesta", null, null) == -1)
			return false;
		
		if (db.delete("Seccion", null, null) == -1)
			return false;
		
		if (db.delete("Pregunta", null, null) == -1)
			return false;
		
		if (db.delete("Respuestas", null, null) == -1)
			return false;
		
		if (db.delete("opMultiple", null, null) == -1)
			return false;
		
		if (db.delete("Validacion", null, null) == -1)
			return false;


        this.setSyncDown();
		return true;
*/return true;
	}
	
}
